2.md

[DP]bzoj 1079: [SCOI2008]着色方案

04 January 2018

【题目描述】

个木块排成一行,从左到右依次编号为~。你有种颜色的油漆,其中第种颜色的油漆足够涂个木块。 所有油漆刚好足够涂满所有木块,即。相邻两个木块涂相同色显得很难看,所以你希望统计任意两个相邻木块颜色不同的着色方案。

【输入】

第一行为一个正整数,第二行包含个整数

【输出】

输出一个整数,即方案总数模的结果。

【样例输入】

3
1 2 3

【样例输出】

10

【提示】

的数据满足:

【题解】

我们发现最多只有,于是就会想到这样一个: 定义表示上一次用的油漆在没有用的情况下可以刷个墙,而此时还能刷个的油漆数量有个,能刷个墙的油漆数量有个……能刷个墙的油漆数量有个; 此时考虑转移方程: 如果能刷个墙的油漆数量大于(也就是说除了上一次用的油漆还有油漆可以用),那么就有转移方程(为当前能刷i个墙的油漆数量的个数,):

 

同理,用能刷其他个数的墙的油漆转移方程如下:

 

初始状态就是F[i][0][0][0][0][0]=1 因为这些量会变化,普通的无法完成,所以就会想到用记忆化,那么最终代码如下: